﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using SERIX.Util;
using Biblioteca.DataBase;
using Pms.Utils;
using System.Data.Common;
using System.Data.OracleClient;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1    
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public class CriteriosPesquisaRelatoGer : CriteriosPesquisa
    {
        public string Ano { get; set; }
        public string Mes { get; set; }
        public string IdtTecnico { get; set; }
        public string Tecnico { get; set; }
        public string IdtMunicipio { get; set; }
        public string IdtPrograma { get; set; }
        public string IdtAcao { get; set; }
        public string IdtIndicador { get; set; }
    }

    public partial class RelatorioMensalExe : Seguranca
    {
        CriteriosPesquisaRelatoGer criteriosPesquisa;

        private void lovSelecaoTecnico(string chave, string descricao)
        {
            txtNomeTecnico.Text = descricao;
            txtNomeTecnico.Attributes.Add("chave", chave);

            SqlMunicipios.SelectParameters["PARAM"].DefaultValue = chave;
            ddlMunicipios.DataBind();
            ddlMunicipios.Items.Insert(0, new ListItem());

            ddlProgramas.Items.Clear();
            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlMunicipios_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlProgramas.SelectParameters["P_IDT_MUN"].DefaultValue = ddlMunicipios.SelectedValue;
            ddlProgramas.DataBind();
            ddlProgramas.Items.Insert(0, new ListItem());

            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlProgramas_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = ddlProgramas.SelectedValue;
            ddlAcoes.DataBind();
            ddlAcoes.Items.Insert(0, new ListItem());

            ddlIndicadores.Items.Clear();
        }

        protected void ddlAcoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = ddlAcoes.SelectedValue;
            ddlIndicadores.DataBind();
            ddlIndicadores.Items.Insert(0, new ListItem());
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            InicializarCriteriosPesquisa();

            lovTecnicos.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecaoTecnico);
            lovTecnicos.ConfigurarLov("Serix", "SRX_TECNICOS", "IDT_TEC", "NOM_TEC", "NOM_TEC", "Pesquisa de Técnicos", "Nome");

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Session["PagAtual"] = 1;
                Navegador1.CarregueBotoes(0);
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaRelatoGer)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaRelatoGer() { FiltroSimples = "", PaginaAtual = 1 };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                //criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.Ano = txtAno.Text;
                criteriosPesquisa.Mes = ddlMeses.SelectedValue;
                criteriosPesquisa.IdtTecnico = txtNomeTecnico.Attributes["chave"].ToString();
                criteriosPesquisa.Tecnico = txtNomeTecnico.Text;
                criteriosPesquisa.IdtMunicipio = ddlMunicipios.SelectedValue;
                criteriosPesquisa.IdtPrograma = ddlProgramas.SelectedValue;
                criteriosPesquisa.IdtAcao = ddlAcoes.SelectedValue;
                criteriosPesquisa.IdtIndicador = ddlIndicadores.SelectedValue;
                criteriosPesquisa.PaginaAtual = 1;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                //txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                txtAno.Text = criteriosPesquisa.Ano;
                ddlMeses.SelectedValue = criteriosPesquisa.Mes;
                txtNomeTecnico.Attributes["chave"] = criteriosPesquisa.IdtTecnico;
                txtNomeTecnico.Text = criteriosPesquisa.Tecnico;

                SqlProgramas.SelectParameters["P_IDT_MUN"].DefaultValue = criteriosPesquisa.IdtMunicipio;
                ddlProgramas.DataBind();
                ddlProgramas.Items.Insert(0, new ListItem());
                ddlProgramas.SelectedValue = criteriosPesquisa.IdtPrograma;

                SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtPrograma;
                ddlAcoes.DataBind();
                ddlAcoes.Items.Insert(0, new ListItem());
                ddlAcoes.SelectedValue = criteriosPesquisa.IdtAcao;

                SqlMunicipios.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtTecnico;
                ddlMunicipios.DataBind();
                ddlMunicipios.Items.Insert(0, new ListItem()); 
                ddlMunicipios.SelectedValue = criteriosPesquisa.IdtMunicipio;

                SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtAcao;
                ddlIndicadores.DataBind();
                ddlIndicadores.Items.Insert(0, new ListItem()); 
                ddlIndicadores.SelectedValue = criteriosPesquisa.IdtIndicador;

                Pesquisar();
                return true;
            }
            return false;
        }

        protected void Pesquisar()
        {
            string login = usuAut.Login;
            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (ddlIndicadores.SelectedValue != "")
                {
                    Session["PagAtual"] = 1;
                    lblFiltro.Text = "Filtro: Registro Mensal do Técnico";
                    string SQL = @"SELECT TIT_DESCRICAO, DESCRICAO, UNIDADE, REALIZADO, META, PRODUCAO, TPO_VINC FROM
                                    (
                                    SELECT DISTINCT DSC_TPO_OPCAO TIT_DESCRICAO, DSC_OPCAO DESCRICAO, UNIDADE, TOTAL_COLETADO REALIZADO, META, TOTAL_PROD_IND PRODUCAO, 'O' TPO_VINC
                                    FROM Serix.SRX_V_RELAT_ORGANIZACOES 
                                    WHERE ANO = :P_ANO AND MES = :P_MES AND 
                                          IDT_TEC = :P_IDT_TEC AND IDT_MUN = :P_IDT_MUN AND
                                          IDT_IND = :P_IDT_IND AND IDT_PROG = :P_IDT_PROG AND IDT_ACAO = :P_IDT_ACAO AND
                                          Serix.F_PERMISSAO_RME(idt_prog,idt_mun,idt_tec) = 'V'
                                    UNION
                                    SELECT DISTINCT DSC_TPO_OPCAO TIT_DESCRICAO, DSC_OPCAO DESCRICAO, UNIDADE, TOTAL_COLETADO REALIZADO, META, TOTAL_PROD_IND PRODUCAO, 'B' TPO_VINC
                                    FROM Serix.SRX_V_RELAT_BENEFICIARIOS 
                                    WHERE ANO = :P_ANO AND MES = :P_MES AND 
                                          IDT_TEC = :P_IDT_TEC AND IDT_MUN = :P_IDT_MUN AND
                                          IDT_IND = :P_IDT_IND AND IDT_PROG = :P_IDT_PROG AND IDT_ACAO = :P_IDT_ACAO AND
                                          Serix.F_PERMISSAO_RME(idt_prog,idt_mun,idt_tec) = 'V'
                                    ) 
                                    ORDER BY TIT_DESCRICAO, DESCRICAO";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        qy.AdicionarParametro("P_ANO", DbType.String, txtAno.Text);
                        qy.AdicionarParametro("P_MES", DbType.String, ddlMeses.SelectedValue);
                        qy.AdicionarParametro("P_IDT_TEC", DbType.String, txtNomeTecnico.Attributes["chave"].ToString());
                        qy.AdicionarParametro("P_IDT_MUN", DbType.String, ddlMunicipios.SelectedValue);
                        qy.AdicionarParametro("P_IDT_IND", DbType.String, ddlIndicadores.SelectedValue);
                        qy.AdicionarParametro("P_IDT_PROG", DbType.String, ddlProgramas.SelectedValue);
                        qy.AdicionarParametro("P_IDT_ACAO", DbType.String, ddlAcoes.SelectedValue);
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            SalvarPesquisa();
            Pesquisar();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string param = string.Format("{0};{1};{2};{3};{4};{5};{6}", txtAno.Text, ddlMeses.SelectedValue, txtNomeTecnico.Attributes["chave"].ToString(), ddlMunicipios.SelectedValue, ddlIndicadores.SelectedValue, ddlProgramas.SelectedValue, ddlAcoes.SelectedValue);

                string TPO_VINC = ((DbDataRecord)e.Row.DataItem)["TPO_VINC"].ToString();
                if (TPO_VINC == "O")
                    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).NavigateUrl = "ValoresOrganizacoes.aspx?idt=" + Server.UrlEncode(Criptografia.Criptografar(param));
                else
                    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).NavigateUrl = "ValoresBeneficiarios.aspx?idt=" + Server.UrlEncode(Criptografia.Criptografar(param));

                //SEGURANÇA
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Enabled = !_permissao.Equals(Constantes.PERM_NEGADA);
            }
        }

        protected void txtAno_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(txtAno.Text))
                txtAno.Text = DateTime.Today.Year.ToString();
        }

        protected void ddlMeses_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && string.IsNullOrEmpty(ddlMeses.SelectedValue))
                ddlMeses.SelectedValue = DateTime.Today.Month.ToString();
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            LimparCriterios();
            SalvarPesquisa();
            gridView.DataSource = null;
            gridView.DataBind();
            Navegador1.CarregueBotoes(0);
        }

        private void LimparCriterios()
        {
            criteriosPesquisa = null;
            txtNomeTecnico.Text = "";
            txtNomeTecnico.Attributes.Clear();

            ddlMunicipios.Items.Clear();
            ddlProgramas.Items.Clear();
            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }
    }
}
